package cn.seaboot.commons.ftp;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import java.io.Serializable;

/**
 * FTP请求参数配置。
 * 虽然在平时的使用，ftp与http非常像，但是在代码中，有着非常大的区别，
 * 设计上，与JDBC更加类似，每个连接都带有域名、账号、密码等参数。
 * 一个ftp连接池，只管理1个服务器的连接，如果同时管理多个ftp服务器，需要配置多个{@link FtpProperties}。
 *
 * @author Mr.css
 * @version 2021-02-20 11:02
 */
public class FtpProperties implements Serializable {
    private static final long serialVersionUID = 4126911132529131736L;
    /**
     * ftp地址
     */
    private String host;
    /**
     * 端口号，默认21
     */
    private Integer port = 21;
    /**
     * 登录用户
     */
    private String username;
    /**
     * 登录密码
     */
    private String password;
    /**
     * 是否使用被动模式。
     * 主动模式下，默认情况下有非常大的概率会被客户端的防火墙拦截，并且会因为没有公网IP导致无法连接。
     */
    private boolean passiveMode = true;
    /**
     * 连接超时时间(秒)
     */
    private Integer connectTimeout = 6000;
    /**
     * 连接池容量
     */
    private int maxTotal = GenericObjectPoolConfig.DEFAULT_MAX_TOTAL;
    /**
     * 字符编码，主要解决中文文件名乱码问题
     */
    private String encoding;
    /**
     * 缓存大小
     *
     * @see new BufferedInputStream(inputStream, __bufferSize)
     */
    private Integer bufferSize = 4096;
    /**
     * ASCII模式下，文件会被处理成当前系统兼容的数据格式，数据内容挥发生一定的变化，
     * BINARY模式，可以保证数据不会发生变化
     */
    private Integer transferFileType = FTP.ASCII_FILE_TYPE;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public Integer getPort() {
        return port;
    }

    public void setPort(Integer port) {
        this.port = port;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public boolean isPassiveMode() {
        return passiveMode;
    }

    public void setPassiveMode(boolean passiveMode) {
        this.passiveMode = passiveMode;
    }

    public String getEncoding() {
        return encoding;
    }

    public void setEncoding(String encoding) {
        this.encoding = encoding;
    }

    public Integer getConnectTimeout() {
        return connectTimeout;
    }

    public void setConnectTimeout(Integer connectTimeout) {
        this.connectTimeout = connectTimeout;
    }

    public Integer getBufferSize() {
        return bufferSize;
    }

    public void setBufferSize(Integer bufferSize) {
        this.bufferSize = bufferSize;
    }

    public Integer getTransferFileType() {
        return transferFileType;
    }

    public void setTransferFileType(Integer transferFileType) {
        this.transferFileType = transferFileType;
    }

    public int getMaxTotal() {
        return maxTotal;
    }

    public void setMaxTotal(int maxTotal) {
        this.maxTotal = maxTotal;
    }

    @Override
    public String toString() {
        return "FtpClientProperties{" +
                "host='" + host + '\'' +
                ", port=" + port +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", maxTotal=" + maxTotal +
                ", passiveMode=" + passiveMode +
                ", connectTimeout=" + connectTimeout +
                ", encoding='" + encoding + '\'' +
                ", bufferSize=" + bufferSize +
                ", transferFileType=" + transferFileType +
                '}';
    }
}